
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet("/News")
public class NewsServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //实例化模板对象
        Configuration configuration = new Configuration();
        //设置模版文件所在的目录
        configuration.setServletContextForTemplateLoading(getServletContext(), "/template");
        //设置编码格式
        configuration.setDefaultEncoding("utf-8");
        //获取模板对象 加载模版文件
        Template template = configuration.getTemplate("news.ftl");

        //设置数据模型
        Map<String,Object> map=new HashMap<>();
        map.put("title","新闻标题");
        map.put("source","yjx");
        map.put("pubTime","2020年7月15日 21:28");
        map.put("content","assign，定义自变量用的，即在前面加上#assign后可以定义单个或多个变量，定义数组也可以。若要打印数组，可以用循环，也可以用内置函数join，将数组的内容全部连接出来进行打印--如${数组名?join(\",\")}\n" +
                "\t\tif else指令，不同于JSPL,可以有if elseif嵌套，还可以判断数据是否为空再执行遍历，避免报错。<#if users2??>在遍历前面加如上标签即可\n");

        String path=req.getServletContext().getRealPath("/");
        File htmlfile=new File(path+"/html");
        if(!htmlfile.exists()){
            //创建文件夹
            htmlfile.mkdir();
        }
        //得到生成的文件名（随机生成）
        String fileName=System.currentTimeMillis()+".html";

        //创建html文件
        File file=new File(htmlfile,fileName);

        FileWriter fileWriter=new FileWriter(file);

        try {
            template.process(map,fileWriter);
        } catch (TemplateException e) {
            e.printStackTrace();
        }finally {
            fileWriter.flush();
            fileWriter.close();
        }


    }
}
